package com.neutech.solar.util;



import com.neutech.solar.constant.Constant;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * 太阳系窗口父类，被所有实现的窗口类继承
 * @author 刘昱含
 * @date 2021/7/21 20:04
 */
public abstract class SolarSystemFrame extends Frame {
    public Image img = GameUtil.getImage("Earth.png");
    public int x;
    public int y;
    public double speed;
    public int width;
    public int height;


    /**
     * 初始化窗口方法
     */
    public void init(String title){
        //设置窗口大小
        this.setSize(Constant.WINDOW_WIDTH,Constant.WINDOW_HEIGHT);
        //传入null值时，默认相对屏幕水平垂直居中
        this.setLocationRelativeTo(null);
        // 设置标题栏
        this.setTitle(title);
        //窗口的logo
        this.setIconImage(GameUtil.getImage("SUN.png"));
        //设置窗口可见性
        this.setVisible(true);
        //设置窗口不可改变大小
        this.setResizable(false);
        //传参多态(不是WindowAdapter类是它的子类，叫做匿名，也是一个类)
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        //启动线程
        new SolarSystemThread().start();
    }
//
//    public abstract void move();
//
//    public abstract void outOfBounds();
//
     // 重新绘制成员窗口的内部类
    private  class SolarSystemThread extends Thread{
        @Override
        public void run() {
            //无限调用paint()
            //内部类可以直接调用外部类的任何属性和行为
            for(;;){
                repaint();
                //统一刷新频率
                try {
                    Thread.sleep(40);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }
    }
    // 解决图片闪烁的问题，用双缓冲方法解决闪烁问题
    Image backImg = null;

    // 重写update()方法，在窗口的里层添加一个虚拟的图片
    @Override
    public void update(Graphics g) {
        if (backImg == null) {
            // 如果虚拟图片不存在，创建一个和窗口一样大小的图片
            backImg = createImage(Constant.WINDOW_WIDTH, Constant.WINDOW_HEIGHT);
        }
        // 获取到虚拟图片的画笔
        Graphics backg = backImg.getGraphics();
        Color c = backg.getColor();
        backg.setColor(Color.WHITE);
        backg.fillRect(0, 0, Constant.WINDOW_WIDTH, Constant.WINDOW_HEIGHT);
        backg.setColor(c);
        // 调用虚拟图片的paint()方法，每50ms刷新一次
        paint(backg);
        g.drawImage(backImg, 0, 0, null);
    }

}

